#include <iostream>
#include<vector>
#include<string>
using namespace std;

int main()
{
    int n = 0;
    cin >> n;
    vector<vector<int>> v;
    v.resize(n);
    for (int i = 0; i < n; i++)
    {
        v[i].resize(n);
    }
    for (int i = 0; i < n; i++)
    {
        v[i][0] = 1;
        v[i][i] = 1;
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 1; j <= i; j++)
        {
            v[i][j] = v[i - 1][j - 1] + v[i - 1][j];
        }
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j <= i; j++)
        {
            cout << to_string(v[i][j]) << "     ";
        }
        cout << endl;
    }
    return 0;
}
//int main() {
//	int n = 0;
//	cin >> n;
//	vector<int> v = { 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811 ,514229, 832040, 1346269, 2178309, 3524578 ,5702887, 9227465, 14930352 ,24157817, 39088169 ,63245986,102334155000 };
//
//	for (int i = 0; i <= 40; i++)
//	{
//		if (n >= v[i] && n <= v[i + 1])
//		{
//			cout << (int)min(abs(n - v[i]), abs(n - v[i + 1]));
//		}
//	}
//	return 0;
//}
//class Solution {
//public:
//    bool search(vector<string>& board, string word, int i, int j, int flag)
//    {
//        if (board[i][j] == word[flag])
//        {
//            return true;
//        }
//        else
//        {
//            return false;
//        }
//        return search(board, word, i - 1, j, flag + 1) || search(board, word, i + 1, j, flag + 1) || search(board, word, i, j + 1, flag + 1) || search(board, word, i, j - 1, flag + 1);
//    }
//
//    bool exist(vector<string>& board, string word) {
//        int lengh = board[0].size();
//        for (int i = 0; i < board.size(); i++)
//        {
//            for (int j = 0; j < lengh; j++)
//            {
//                if (board[i][j] == word[0])
//                {
//                    if (search(board, word, i, j, 0))
//                    {
//                        return true;
//                    }
//                }
//            }
//        }
//        return false;
//    }
//};